#include "BlockQueue.hpp"
#include "Task.hpp"

// 生产者线程
void *produce(void *arg)
{
    // int data = 1;
   /*  int x = 1;
    int y = 1; */

    BlockQueue<task_t> *bq = (BlockQueue<task_t> *)arg;
    while (1)
    {
        sleep(1);
        std::cout << "我是线程A，生产了一个任务： "  << std::endl;
        bq->enqueue(Download);
    }
}

// 消费者线程
void *consume(void *arg)
{
    BlockQueue<task_t> *bq = (BlockQueue<task_t> *)arg;
    while (1)
    {
        //sleep(1);
        task_t tsk = bq->dequeue();
        std::cout << "我是线程B，消费（执行）了一个任务： " << std::endl;
        // tsk.add();
        /*std::cout << "消费了一个任务： "
                  << tsk.get_a() << " + " << tsk.get_b() << " = ? 计算得： " << tsk.get_result() << std::endl;*/
        tsk();
    }
}

int main()
{
    // 创建阻塞队列
    BlockQueue<task_t> *bq = new BlockQueue<task_t>();

    // 创建生产者、消费者线程
    pthread_t producer, consumer;
    pthread_create(&producer, NULL, produce, bq); // 创建生产者线程
    pthread_create(&consumer, NULL, consume, bq); // 创建消费者线程

    // 等待线程退出
    pthread_join(producer, NULL);
    pthread_join(consumer, NULL);

    return 0;
}